home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / ioctl.c,v < prev    next >
Text File  |  1991-12-08  |  27KB  |  1,153 lines

  1. head     1.15;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.15.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.15
  10. date     91.07.17.16.03.11;  author mgbaker;  state Exp;
  11. branches 1.15.1.1;
  12. next     1.14;
  13.  
  14. 1.14
  15. date     90.09.25.19.01.54;  author mgbaker;  state Exp;
  16. branches ;
  17. next     1.13;
  18.  
  19. 1.13
  20. date     90.06.27.11.19.26;  author shirriff;  state Exp;
  21. branches ;
  22. next     1.12;
  23.  
  24. 1.12
  25. date     90.06.25.16.18.26;  author mgbaker;  state Exp;
  26. branches ;
  27. next     1.11;
  28.  
  29. 1.11
  30. date     90.06.05.14.39.20;  author shirriff;  state Exp;
  31. branches ;
  32. next     1.10;
  33.  
  34. 1.10
  35. date     89.07.18.18.16.30;  author ouster;  state Exp;
  36. branches ;
  37. next     1.9;
  38.  
  39. 1.9
  40. date     89.03.11.12.24.44;  author ouster;  state Exp;
  41. branches ;
  42. next     1.8;
  43.  
  44. 1.8
  45. date     89.02.19.15.59.13;  author rab;  state Exp;
  46. branches ;
  47. next     1.7;
  48.  
  49. 1.7
  50. date     89.01.06.06.58.49;  author rab;  state Exp;
  51. branches ;
  52. next     1.6;
  53.  
  54. 1.6
  55. date     88.11.17.22.47.23;  author rab;  state Exp;
  56. branches ;
  57. next     1.5;
  58.  
  59. 1.5
  60. date     88.07.29.17.39.44;  author ouster;  state Exp;
  61. branches ;
  62. next     1.4;
  63.  
  64. 1.4
  65. date     88.07.28.17.32.22;  author ouster;  state Exp;
  66. branches ;
  67. next     1.3;
  68.  
  69. 1.3
  70. date     88.06.21.17.11.28;  author ouster;  state Exp;
  71. branches ;
  72. next     1.2;
  73.  
  74. 1.2
  75. date     88.06.21.17.09.58;  author ouster;  state Exp;
  76. branches ;
  77. next     1.1;
  78.  
  79. 1.1
  80. date     88.06.19.14.31.33;  author ouster;  state Exp;
  81. branches ;
  82. next     ;
  83.  
  84. 1.15.1.1
  85. date     91.12.08.14.56.20;  author kupfer;  state Exp;
  86. branches ;
  87. next     ;
  88.  
  89.  
  90. desc
  91. @@
  92.  
  93.  
  94. 1.15
  95. log
  96. @Frame buffer ioctls.
  97. @
  98. text
  99. @/* 
  100.  * ioctl.c --
  101.  *
  102.  *    Procedure to map from Unix ioctl system call to Sprite.
  103.  *
  104.  * Copyright 1986 Regents of the University of California
  105.  * All rights reserved.
  106.  */
  107.  
  108. #ifndef lint
  109. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.14 90/09/25 19:01:54 mgbaker Exp Locker: mgbaker $ SPRITE (Berkeley)";
  110. #endif not lint
  111.  
  112. #include <sys/ioctl.h>
  113. #include <sys/termios.h>
  114. #include <sprite.h>
  115. #include <stdio.h>
  116. #include <compatInt.h>
  117. #include <dev/tty.h>
  118. #include <dev/net.h>
  119. #include <dev/graphics.h>
  120. #include <fs.h>
  121. #include <errno.h>
  122.  
  123. #include <sys/types.h>
  124. #include <fcntl.h>
  125. #include <sys/socket.h>
  126. #include <sys/ttychars.h>
  127. #include <sys/ttydev.h>
  128. #include <net/route.h>
  129. #include <net/if.h>
  130. #include <sys/time.h>
  131. #include <dev/audio.h>
  132. #include <sys/audioio.h>
  133.  
  134. #ifdef __STDC__
  135. static void DecodeRequest(int request);
  136. #else
  137. #define const
  138. static void DecodeRequest();
  139. #endif
  140.  
  141. #ifdef notdef
  142. int compatTapeIOCMap[] = {
  143.     IOC_TAPE_WEOF,         /* 0, MTWEOF */
  144.     IOC_TAPE_SKIP_FILES,    /* 1, MTFSF */
  145.     IOC_TAPE_BACKUP_FILES,    /* 2, MTBSF */
  146.     IOC_TAPE_SKIP_BLOCKS,    /* 3, MTFSR */
  147.     IOC_TAPE_BACKUP_BLOCKS,    /* 4, MTBSR */
  148.     IOC_TAPE_REWIND,         /* 5, MTREW */
  149.     IOC_TAPE_OFFLINE,         /* 6, MTOFFL */
  150.     IOC_TAPE_NO_OP,        /* 7, MTNOP */
  151.     IOC_TAPE_RETENSION,        /* 8, MTRETEN */
  152.     IOC_TAPE_ERASE,        /* 9, MTERASE */
  153. };
  154. #endif
  155.  
  156.  
  157. /*
  158.  *----------------------------------------------------------------------
  159.  *
  160.  * ioctl --
  161.  *
  162.  *    Compat procedure for Unix ioctl call. This procedure usually does
  163.  *    nothing.
  164.  *
  165.  * Results:
  166.  *    Returns UNIX_ERROR if there's no known way to emulate the ioctl
  167.  *    under Sprite.  Otherwise, returns whatever UNIX would return.
  168.  *
  169.  * Side effects:
  170.  *    None.
  171.  *
  172.  *----------------------------------------------------------------------
  173.  */
  174.  
  175. int
  176. ioctl(fd, request, buf)
  177.     int        fd;
  178.     int        request;
  179.     char *    buf;
  180. {
  181.     ReturnStatus    status;
  182.  
  183.     switch (request) {
  184.  
  185.     /*
  186.      * Generic calls:
  187.      */
  188.  
  189.     case FIOCLEX: {
  190.         /*
  191.          * Set the close-on-exec bit for the file.
  192.          * Buf is not used.
  193.          */
  194.  
  195.         int flag = IOC_CLOSE_ON_EXEC;
  196.         status = Fs_IOControl(fd, IOC_SET_BITS, 
  197.                 sizeof(flag), (Address) &flag, 0, (Address) NULL);
  198.         }
  199.         break;
  200.  
  201.     case FIONCLEX: {
  202.         /*
  203.          * Clear the close-on-exec bit for the file.
  204.          * Buf is not used.
  205.          */
  206.  
  207.         int flag = IOC_CLOSE_ON_EXEC;
  208.         status = Fs_IOControl(fd, IOC_CLEAR_BITS, 
  209.                 sizeof(flag), (Address) &flag, 0, (Address) NULL);
  210.         }
  211.         break;
  212.  
  213.     case FIONREAD:
  214.         status = Fs_IOControl(fd, IOC_NUM_READABLE, 0, (Address) NULL,
  215.             sizeof(int), buf);
  216.         break;
  217.  
  218.         case FIONBIO: {
  219.         /*
  220.          * Set or clear the non-blocking I/O bit for the file.
  221.          */
  222.  
  223.         int flag = IOC_NON_BLOCKING;
  224.         if (*(int *)buf) {
  225.             status = Fs_IOControl(fd, IOC_SET_BITS, 
  226.                 sizeof(flag), (Address) &flag, 0, (Address) NULL);
  227.         } else {
  228.             status = Fs_IOControl(fd, IOC_CLEAR_BITS, 
  229.                 sizeof(flag), (Address) &flag, 0, (Address) NULL);
  230.         }
  231.         }
  232.         break;
  233.  
  234.     case FIOASYNC: {
  235.         /*
  236.          * Set or clear the asynchronous I/O bit for the file.
  237.          */
  238.  
  239.         int flag = IOC_ASYNCHRONOUS;
  240.         if (*(int *)buf) {
  241.             status = Fs_IOControl(fd, IOC_SET_BITS, 
  242.                 sizeof(flag), (Address) &flag, 0, (Address) NULL);
  243.         } else {
  244.             status = Fs_IOControl(fd, IOC_CLEAR_BITS, 
  245.                 sizeof(flag), (Address) &flag, 0, (Address) NULL);
  246.         }
  247.         }
  248.         break;
  249.  
  250.  
  251.     case FIOGETOWN:
  252.     case SIOCGPGRP:
  253.     case TIOCGPGRP: {
  254.         int procOrFamily;
  255.  
  256.         status = Ioc_GetOwner(fd, (int *)buf, &procOrFamily);
  257.         }
  258.         break;
  259.  
  260.     case FIOSETOWN:
  261.     case SIOCSPGRP:
  262.     case TIOCSPGRP:
  263.         status = Ioc_SetOwner(fd, *(int *)buf, IOC_OWNER_FAMILY);
  264.         break;
  265.  
  266.     /* 
  267.      * Tty-related calls:
  268.      */
  269.  
  270.     case TIOCGETP:
  271.         status = Fs_IOControl(fd, IOC_TTY_GET_PARAMS, 0, (Address) NULL,
  272.             sizeof(struct sgttyb), (Address) buf);
  273.         break;
  274.     case TIOCSETP:
  275.         status = Fs_IOControl(fd, IOC_TTY_SET_PARAMS, sizeof(struct sgttyb),
  276.             (Address) buf, 0, (Address) NULL);
  277.         break;
  278.     case TIOCSETN:
  279.         status = Fs_IOControl(fd, IOC_TTY_SETN, sizeof(struct sgttyb),
  280.             (Address) buf, 0, (Address) NULL);
  281.         break;
  282.     case TIOCEXCL:
  283.         status = Fs_IOControl(fd, IOC_TTY_EXCL, 0, (Address) NULL,
  284.             0, (Address) NULL);
  285.         break;
  286.     case TIOCNXCL:
  287.         status = Fs_IOControl(fd, IOC_TTY_NXCL, 0, (Address) NULL,
  288.             0, (Address) NULL);
  289.         break;
  290.     case TIOCHPCL:
  291.         status = Fs_IOControl(fd, IOC_TTY_HUP_ON_CLOSE, 0,
  292.             (Address) NULL, 0, (Address) NULL);
  293.         break;
  294.     case TIOCFLUSH:
  295.         status = Fs_IOControl(fd, IOC_TTY_FLUSH, sizeof(int),
  296.             (Address) buf, 0, (Address) NULL);
  297.         break;
  298.     case TIOCSTI:
  299.         status = Fs_IOControl(fd, IOC_TTY_INSERT_CHAR, sizeof(char),
  300.             (Address) buf, 0, (Address) NULL);
  301.         break;
  302.     case TIOCSBRK:
  303.         status = Fs_IOControl(fd, IOC_TTY_SET_BREAK, 0,
  304.             (Address) NULL, 0, (Address) NULL);
  305.         break;
  306.     case TIOCCBRK:
  307.         status = Fs_IOControl(fd, IOC_TTY_CLEAR_BREAK, 0,
  308.             (Address) NULL, 0, (Address) NULL);
  309.         break;
  310.     case TIOCSDTR:
  311.         status = Fs_IOControl(fd, IOC_TTY_SET_DTR, 0, 
  312.             (Address) NULL, 0, (Address) NULL);
  313.         break;
  314.     case TIOCCDTR:
  315.         status = Fs_IOControl(fd, IOC_TTY_CLEAR_DTR, 0,
  316.             (Address) NULL, 0, (Address) NULL);
  317.         break;
  318.     case TIOCGETC:
  319.         status = Fs_IOControl(fd, IOC_TTY_GET_TCHARS, 0, (Address) NULL,
  320.             sizeof(struct tchars), (Address) buf);
  321.         break;
  322.     case TIOCSETC:
  323.         status = Fs_IOControl(fd, IOC_TTY_SET_TCHARS,
  324.             sizeof(struct tchars), (Address) buf, 0, (Address) NULL);
  325.         break;
  326.     case TIOCGLTC:
  327.         status = Fs_IOControl(fd, IOC_TTY_GET_LTCHARS, 0, (Address) NULL,
  328.             sizeof(struct ltchars), (Address) buf);
  329.         break;
  330.     case TIOCSLTC:
  331.         status = Fs_IOControl(fd, IOC_TTY_SET_LTCHARS,
  332.             sizeof(struct ltchars), (Address) buf, 0, (Address) NULL);
  333.         break;
  334.     case TIOCLBIS:
  335.         status = Fs_IOControl(fd, IOC_TTY_BIS_LM,
  336.             sizeof(int), (Address) buf, 0, (Address) NULL);
  337.         break;
  338.     case TIOCLBIC:
  339.         status = Fs_IOControl(fd, IOC_TTY_BIC_LM,
  340.             sizeof(int), (Address) buf, 0, (Address) NULL);
  341.         break;
  342.     case TIOCLSET:
  343.         status = Fs_IOControl(fd, IOC_TTY_SET_LM,
  344.             sizeof(int), (Address) buf, 0, (Address) NULL);
  345.         break;
  346.     case TIOCLGET:
  347.         status = Fs_IOControl(fd, IOC_TTY_GET_LM, 0, (Address) NULL,
  348.             sizeof(int), (Address) buf);
  349.         break;
  350.     case TIOCGETD:
  351.         status = Fs_IOControl(fd, IOC_TTY_GET_DISCIPLINE, 0,
  352.             (Address) NULL, sizeof(int), (Address) buf);
  353.         break;
  354.     case TIOCSETD:
  355.         status = Fs_IOControl(fd, IOC_TTY_SET_DISCIPLINE,
  356.         sizeof(int), (Address) buf, 0, (Address) NULL);
  357.         break;
  358.  
  359.     case SIOCATMARK:
  360.         status = Fs_IOControl(fd, IOC_NET_IS_OOB_DATA_NEXT,
  361.                 0, (Address) NULL, sizeof(int), (Address) buf);
  362.         break;
  363.  
  364.         case TCGETS:
  365.         status = Fs_IOControl(fd, IOC_TTY_GET_TERMIO,
  366.         0, (Address) NULL, sizeof(struct termios), (Address) buf);
  367.         break;
  368.  
  369.         case TCSETS:
  370.         status = Fs_IOControl(fd, IOC_TTY_SET_TERMIO,
  371.         sizeof(struct termios), (Address) buf, 0, (Address) NULL);
  372.         break;
  373.  
  374.     case TIOCGWINSZ:
  375.         status = Fs_IOControl(fd, IOC_TTY_GET_WINDOW_SIZE,
  376.         0, (Address) NULL, sizeof(struct winsize), (Address) buf);
  377.         break;
  378.  
  379.         case TIOCSWINSZ:
  380.         status = Fs_IOControl(fd, IOC_TTY_SET_WINDOW_SIZE,
  381.         sizeof(struct winsize), (Address) buf, 0, (Address) NULL);
  382.         break;
  383.  
  384.         case TIOCNOTTY:
  385.         status = Fs_IOControl(fd, IOC_TTY_NOT_CONTROL_TTY, 0,
  386.             (Address) NULL, 0, (Address) NULL);
  387.         break;
  388.     /*
  389.      * Graphics requests - decstations.
  390.      */
  391.     case QIOCGINFO:
  392.         status = Fs_IOControl(fd, IOC_GRAPHICS_GET_INFO,
  393.         0, (Address) NULL, sizeof(DevScreenInfo *), (Address)buf);
  394.         break;
  395.     case QIOCPMSTATE:
  396.         status = Fs_IOControl(fd, IOC_GRAPHICS_MOUSE_POS,
  397.         sizeof(DevCursor), (Address) buf, 0, (Address)NULL);
  398.         break;
  399.     case QIOWCURSORCOLOR:
  400.         status = Fs_IOControl(fd, IOC_GRAPHICS_CURSOR_COLOR,
  401.         sizeof(unsigned int [6]), (Address) buf, 0, (Address)NULL);
  402.         break;
  403.     case QIOCINIT:
  404.         status = Fs_IOControl(fd, IOC_GRAPHICS_INIT_SCREEN,
  405.         0, (Address) NULL, 0, (Address)NULL);
  406.         break;
  407.     case QIOCKPCMD:
  408.         status = Fs_IOControl(fd, IOC_GRAPHICS_KBD_CMD,
  409.         sizeof(DevKpCmd), (Address) buf, 0, (Address)NULL);
  410.         break;
  411.     case QIOCADDR:
  412.         status = Fs_IOControl(fd, IOC_GRAPHICS_GET_INFO_ADDR,
  413.         0, (Address) NULL, sizeof(DevScreenInfo *), (Address)buf);
  414.         break;
  415.     case QIOWCURSOR:
  416.         status = Fs_IOControl(fd, IOC_GRAPHICS_CURSOR_BIT_MAP,
  417.         sizeof(short[32]), (Address) buf, 0, (Address)NULL);
  418.         break;
  419.     case QIOKERNLOOP:
  420.         status = Fs_IOControl(fd, IOC_GRAPHICS_KERN_LOOP,
  421.         0, (Address) NULL, 0, (Address)NULL);
  422.         break;
  423.     case QIOKERNUNLOOP:
  424.         status = Fs_IOControl(fd, IOC_GRAPHICS_KERN_UNLOOP,
  425.         0, (Address) NULL, 0, (Address)NULL);
  426.         break;
  427.     case QIOVIDEOON:
  428.         status = Fs_IOControl(fd, IOC_GRAPHICS_VIDEO_ON,
  429.         0, (Address) NULL, 0, (Address)NULL);
  430.         break;
  431.     case QIOVIDEOOFF:
  432.         status = Fs_IOControl(fd, IOC_GRAPHICS_VIDEO_OFF,
  433.         0, (Address) NULL, 0, (Address)NULL);
  434.         break;
  435.     case QIOSETCMAP:
  436.         status = Fs_IOControl(fd, IOC_GRAPHICS_COLOR_MAP,
  437.         sizeof(DevColorMap), (Address) buf, 0, (Address)NULL);
  438.         break;
  439.     case QIOISCOLOR:
  440.         status = Fs_IOControl(fd, IOC_GRAPHICS_IS_COLOR,
  441.         0, (Address) NULL, sizeof (int), (Address) buf);
  442.         break;
  443.     case SIOCGIFCONF: {
  444.         struct ifconf *ifcPtr;
  445.  
  446.         /*
  447.          * Fake this IO control so that X will work (gasp!!).
  448.          */
  449.         ifcPtr = (struct ifconf *)buf;
  450.         ifcPtr->ifc_len = 0;
  451.         status = SUCCESS;
  452.         break;
  453.     }
  454.     /*
  455.      * Graphics requests - suns.
  456.      */
  457.     case FBIOGTYPE:
  458.         status = Fs_IOControl(fd, FBIOGTYPE, 0, (Address) NULL,
  459.             sizeof (fbtype), (Address) buf);
  460.         break;
  461.     case FBIOPUTCMAP:
  462.         status = Fs_IOControl(fd, FBIOPUTCMAP, sizeof (fbcmap),
  463.             (Address) buf, 0, (Address) NULL);
  464.         break;
  465.     case FBIOSVIDEO:
  466.         status = Fs_IOControl(fd, FBIOSVIDEO, sizeof (int),
  467.             (Address) buf, 0, (Address) NULL);
  468.         break;
  469.     case FBIOGVIDEO:
  470.         status = Fs_IOControl(fd, FBIOGVIDEO, 0, (Address) NULL,
  471.             sizeof (int), (Address) buf);
  472.         break;
  473.     case FBIOGPIXRECT:    /* not implemented yet */
  474.     case FBIOGINFO:        /* not implemented yet */
  475.     case FBIOGETCMAP:    /* not implemented yet */
  476.     case FBIOSATTR:        /* not implemented yet */
  477.     case FBIOGATTR:        /* not implemented yet */
  478.     case FBIOVERTICAL:    /* not implemented yet */
  479.         errno = EINVAL;
  480.         return(UNIX_ERROR);
  481.     /*
  482.      * Audio requests.
  483.      */
  484.     case AUDIOGETREG:
  485.         status = Fs_IOControl(fd, IOC_AUDIO_GETREG,
  486.         sizeof(struct audio_ioctl), (Address) buf, sizeof(struct
  487.         audio_ioctl), (Address)buf);
  488.         break;
  489.     case AUDIOSETREG:
  490.         status = Fs_IOControl(fd, IOC_AUDIO_SETREG,
  491.         sizeof(DevColorMap), (Address) buf, 0, (Address)NULL);
  492.         break;
  493.     case AUDIOREADSTART:
  494.         status = Fs_IOControl(fd, IOC_AUDIO_READSTART,
  495.         0, (Address) NULL, 0, (Address)NULL);
  496.         break;
  497.     case AUDIOSTOP:
  498.         status = Fs_IOControl(fd, IOC_AUDIO_STOP,
  499.         0, (Address) NULL, 0, (Address)NULL);
  500.         break;
  501.     case AUDIOPAUSE:
  502.         status = Fs_IOControl(fd, IOC_AUDIO_PAUSE,
  503.         0, (Address) NULL, 0, (Address)NULL);
  504.         break;
  505.     case AUDIORESUME:
  506.         status = Fs_IOControl(fd, IOC_AUDIO_RESUME,
  507.         0, (Address) NULL, 0, (Address)NULL);
  508.         break;
  509.     case AUDIOREADQ:
  510.         status = Fs_IOControl(fd, IOC_AUDIO_READQ,
  511.         0, (Address) NULL, sizeof(int), (Address)buf);
  512.         break;
  513.     case AUDIOWRITEQ:
  514.         status = Fs_IOControl(fd, IOC_AUDIO_WRITEQ,
  515.         0, (Address) NULL, sizeof(int), (Address)buf);
  516.         break;
  517.     case AUDIOGETQSIZE:
  518.         status = Fs_IOControl(fd, IOC_AUDIO_GETQSIZE,
  519.         0, (Address) NULL, sizeof(int), (Address)buf);
  520.         break;
  521.     case AUDIOSETQSIZE:
  522.         status = Fs_IOControl(fd, IOC_AUDIO_SETQSIZE,
  523.         sizeof(int), (Address) buf, 0, (Address)NULL);
  524.         break;
  525.  
  526.     /*
  527.      * Magnetic-tape requests:  need to define dev/mt.h before
  528.      * re-enabling this code.  Can't use UNIX include files, because
  529.      * they want ioc.h, which redefines all the tty ioctls.
  530.      */
  531.  
  532. #ifdef notdef
  533.     case MTIOCTOP: {
  534.         /*
  535.          * Have to peek into the request buffer to map the specific
  536.          * tape commands.
  537.          */
  538.         Dev_TapeCommand cmd;
  539.         struct mtop *unixCmdPtr = (struct mtop *)buf;
  540.  
  541.         if (unixCmdPtr->mt_op > MTERASE ||
  542.         unixCmdPtr->mt_op < 0) {
  543.         errno = EINVAL;
  544.         return(UNIX_ERROR);
  545.         }
  546.         cmd.command = compatTapeIOCMap[unixCmdPtr->mt_op];
  547.         cmd.count = unixCmdPtr->mt_count;
  548.         status = Ioc_TapeCommand(fd, (Address)&cmd);
  549.         break;
  550.     }
  551.     case MTIOCGET: {
  552.         Dev_TapeStatus stat;
  553.         struct mtget *unixStatPtr;
  554.         /*
  555.          * DO ME, check sys/mtio.h
  556.          */
  557.     }
  558. #endif notdef
  559.  
  560.     /*
  561.      * Unknown requests:
  562.      */
  563.  
  564.     default:
  565.         DecodeRequest(request);
  566.         errno = EINVAL;
  567.         return(UNIX_ERROR);
  568.     }
  569.  
  570.     if (status != SUCCESS) {
  571.         errno = Compat_MapCode(status);
  572.         return(UNIX_ERROR);
  573.     }
  574.  
  575.     return(UNIX_SUCCESS);
  576. }
  577.  
  578.  
  579.  
  580. /*
  581.  *----------------------------------------------------------------------
  582.  *
  583.  * DecodeRequest --
  584.  *
  585.  *    Takes a UNIX ioctl request and prints the name of the request
  586.  *    on the standard error file.
  587.  *
  588.  * Results:
  589.  *    None.
  590.  *
  591.  * Side effects:
  592.  *    None.
  593.  *
  594.  *----------------------------------------------------------------------
  595.  */
  596.  
  597. typedef struct {
  598.     char *name;
  599.     int     request;
  600. } RequestName;
  601.  
  602. static void
  603. DecodeRequest(request)
  604.     int request;
  605. {
  606.     register int i;
  607.     /*
  608.      * The following list contains all the ioctls in 
  609.      * /usr/include/sys/ioctl.h (SunOS 3.2), and
  610.      * /usr/include/sys/termios.h (SunOS 4.0).
  611.      */
  612.     const static RequestName mapping[] = {
  613.     {"TIOCGETD",    TIOCGETD},
  614.     {"TIOCSETD",    TIOCSETD},
  615.     {"TIOCHPCL",    TIOCHPCL},
  616.     {"TIOCMODG",    TIOCMODG},
  617.     {"TIOCMODS",    TIOCMODS},
  618.     {"TIOCGETP",    TIOCGETP},
  619.     {"TIOCSETP",    TIOCSETP},
  620.     {"TIOCSETN",    TIOCSETN},
  621.     {"TIOCEXCL",    TIOCEXCL},
  622.     {"TIOCNXCL",    TIOCNXCL},
  623.     {"TIOCFLUSH",    TIOCFLUSH},
  624.     {"TIOCSETC",    TIOCSETC},
  625.     {"TIOCGETC",    TIOCGETC},
  626.     {"TIOCLBIS",    TIOCLBIS},
  627.     {"TIOCLBIC",    TIOCLBIC},
  628.     {"TIOCLSET",    TIOCLSET},
  629.     {"TIOCLGET",    TIOCLGET},
  630.     {"TIOCSBRK",    TIOCSBRK},
  631.     {"TIOCCBRK",    TIOCCBRK},
  632.     {"TIOCSDTR",    TIOCSDTR},
  633.     {"TIOCCDTR",    TIOCCDTR},
  634.     {"TIOCSLTC",    TIOCSLTC},
  635.     {"TIOCGLTC",    TIOCGLTC},
  636.     {"TIOCOUTQ",    TIOCOUTQ},
  637.     {"TIOCSTI",    TIOCSTI},
  638.     {"TIOCNOTTY",    TIOCNOTTY},
  639.     {"TIOCPKT",    TIOCPKT},
  640.     {"TIOCSTOP",    TIOCSTOP},
  641.     {"TIOCSTART",    TIOCSTART},
  642.     {"TIOCMSET",    TIOCMSET},
  643.     {"TIOCMBIS",    TIOCMBIS},
  644.     {"TIOCMBIC",    TIOCMBIC},
  645.     {"TIOCMGET",    TIOCMGET},
  646.     {"TIOCREMOTE",    TIOCREMOTE},
  647.     {"TIOCGWINSZ",    TIOCGWINSZ},
  648.     {"TIOCSWINSZ",    TIOCSWINSZ},
  649.     {"TIOCUCNTL",    TIOCUCNTL},
  650.     {"TIOCCONS",    TIOCCONS},
  651.     {"TIOCSSIZE",    TIOCSSIZE},
  652.     {"TIOCGSIZE",    TIOCGSIZE},
  653.     {"SIOCSHIWAT",    SIOCSHIWAT},
  654.     {"SIOCGHIWAT",    SIOCGHIWAT},
  655.     {"SIOCSLOWAT",    SIOCSLOWAT},
  656.     {"SIOCGLOWAT",    SIOCGLOWAT},
  657.     {"SIOCADDRT",    SIOCADDRT},
  658.     {"SIOCDELRT",    SIOCDELRT},
  659.     {"SIOCSIFADDR",    SIOCSIFADDR},
  660.     {"SIOCGIFADDR",    SIOCGIFADDR},
  661.     {"SIOCSIFDSTADDR",    SIOCSIFDSTADDR},
  662.     {"SIOCGIFDSTADDR",    SIOCGIFDSTADDR},
  663.     {"SIOCSIFFLAGS",    SIOCSIFFLAGS},
  664.     {"SIOCGIFFLAGS",    SIOCGIFFLAGS},
  665.     {"SIOCGIFCONF",    SIOCGIFCONF},
  666.     {"SIOCGIFBRDADDR",    SIOCGIFBRDADDR},
  667.     {"SIOCSIFBRDADDR",    SIOCSIFBRDADDR},
  668.     {"SIOCGIFNETMASK",    SIOCGIFNETMASK},
  669.     {"SIOCSIFNETMASK",    SIOCSIFNETMASK},
  670.     {"SIOCGIFMETRIC",    SIOCGIFMETRIC},
  671.     {"SIOCSIFMETRIC",    SIOCSIFMETRIC},
  672.     {"SIOCSARP",    SIOCSARP},
  673.     {"SIOCGARP",    SIOCGARP},
  674.     {"SIOCDARP",    SIOCDARP},
  675.     {"TCXONC",      TCXONC},
  676.     {"TCFLSH",      TCFLSH},
  677.     {"TCGETS",      TCGETS},
  678.     {"TCSETS",      TCSETS},
  679.     {"AUDIOREADSTART",    AUDIOREADSTART},
  680.     {"AUDIOPAUSE",    AUDIOPAUSE},
  681.     {"AUDIORESUME",    AUDIORESUME},
  682.     {"AUDIOSTOP",    AUDIOSTOP},
  683.     {"AUDIOREADQ",    AUDIOREADQ},
  684.     {"AUDIOWRITEQ",    AUDIOWRITEQ},
  685.     {"AUDIOGETQSIZE",    AUDIOGETQSIZE},
  686.     {"AUDIOSETQSIZE",    AUDIOSETQSIZE},
  687.     {"AUDIOSETREG",    AUDIOSETREG},
  688.     {"AUDIOGETREG",    AUDIOGETREG},
  689.     };
  690.  
  691.     if ((request == TIOCGSIZE) || (request == TIOCGWINSZ)) {
  692.     /*
  693.      * Special-case TIOCGSIZE since every visually-oriented program
  694.      * uses it and it's annoying to constantly get the messages.
  695.      */
  696.     return;
  697.     }
  698.  
  699.     /*
  700.      * For now search the list linearly. It's slow but simple...
  701.      */
  702.     for (i = sizeof(mapping)/sizeof(*mapping); --i >= 0;) {
  703.     if (request == mapping[i].request) {
  704.         fprintf(stderr, "ioctl: bad command %s\n", mapping[i].name);
  705.         return;
  706.     }
  707.     }
  708.     fprintf(stderr, "ioctl: bad command 0x%x\n", request);
  709.     return;
  710. }
  711. @
  712.  
  713.  
  714. 1.15.1.1
  715. log
  716. @Initial branch for Sprite server.
  717. @
  718. text
  719. @d11 1
  720. a11 1
  721. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.15 91/07/17 16:03:11 mgbaker Exp $ SPRITE (Berkeley)";
  722. @
  723.  
  724.  
  725. 1.14
  726. log
  727. @Before further frame buffer changes.
  728. @
  729. text
  730. @d11 1
  731. a11 1
  732. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.13 90/06/27 11:19:26 shirriff Exp Locker: mgbaker $ SPRITE (Berkeley)";
  733. d363 1
  734. a363 1
  735.     case FBIOPUTCMAP:    /* not implemented yet */
  736. d367 1
  737. a367 1
  738.     case FBIOSVIDEO:    /* not implemented yet */
  739. d371 4
  740. a379 1
  741.     case FBIOGVIDEO:    /* not implemented yet */
  742. @
  743.  
  744.  
  745. 1.13
  746. log
  747. @Added TIOCNOTTY.
  748. @
  749. text
  750. @d11 1
  751. a11 1
  752. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.12 90/06/25 16:18:26 mgbaker Exp Locker: shirriff $ SPRITE (Berkeley)";
  753. d341 4
  754. d363 8
  755. a372 1
  756.     case FBIOPUTCMAP:    /* not implemented yet */
  757. a375 1
  758.     case FBIOSVIDEO:    /* not implemented yet */
  759. @
  760.  
  761.  
  762. 1.12
  763. log
  764. @Added sun graphics requests.
  765. (Checked in by shirriff).
  766. @
  767. text
  768. @d11 1
  769. a11 1
  770. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.11 90/06/05 14:39:20 shirriff Exp Locker: mgbaker $ SPRITE (Berkeley)";
  771. d284 5
  772. @
  773.  
  774.  
  775. 1.11
  776. log
  777. @Mary checking this in for Ken.  He's added the audio ioctls.
  778. @
  779. text
  780. @d11 1
  781. a11 1
  782. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.10 89/07/18 18:16:30 ouster Exp Locker: shirriff $ SPRITE (Berkeley)";
  783. d286 1
  784. a286 1
  785.      * Graphics requests.
  786. d347 18
  787. @
  788.  
  789.  
  790. 1.10
  791. log
  792. @Merge <dev/graphics.h> and <kernel/devGraphics.h>
  793. Also, incorporate Mike's changes for DS3100 display.
  794. @
  795. text
  796. @d11 1
  797. a11 1
  798. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.9 89/03/11 12:24:44 ouster Exp Locker: nelson $ SPRITE (Berkeley)";
  799. d33 2
  800. d347 44
  801. d545 10
  802. @
  803.  
  804.  
  805. 1.9
  806. log
  807. @Added TIOCSWINSZ and TIOCGWINSZ.
  808. @
  809. text
  810. @d11 1
  811. a11 1
  812. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.8 89/02/19 15:59:13 rab Exp $ SPRITE (Berkeley)";
  813. d21 1
  814. d283 62
  815. @
  816.  
  817.  
  818. 1.8
  819. log
  820. @*** empty log message ***
  821. @
  822. text
  823. @d11 1
  824. a11 1
  825. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.7 89/01/06 06:58:49 rab Exp Locker: rab $ SPRITE (Berkeley)";
  826. d271 10
  827. @
  828.  
  829.  
  830. 1.7
  831. log
  832. @Added TCSETS and TCGETS.
  833. @
  834. text
  835. @d11 1
  836. a11 1
  837. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.6 88/11/17 22:47:23 rab Exp Locker: rab $ SPRITE (Berkeley)";
  838. d37 1
  839. a37 1
  840. static void DecodeRequest(int request);
  841. @
  842.  
  843.  
  844. 1.6
  845. log
  846. @fixed TIOCFLUSH so that it passes the input buffer.
  847. fixed incorrect forward references of mapping[] and mapSize.
  848. @
  849. text
  850. @d11 1
  851. a11 1
  852. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/ioctl.c,v 1.5 88/07/29 17:39:44 ouster Exp Locker: rab $ SPRITE (Berkeley)";
  853. d15 1
  854. d33 7
  855. a257 1
  856.  
  857. d263 4
  858. d268 4
  859. d349 1
  860. d356 2
  861. a357 1
  862.      * /usr/include/sys/ioctl.h (SunOS 3.2).
  863. d422 4
  864. d446 1
  865. @
  866.  
  867.  
  868. 1.5
  869. log
  870. @Lint.
  871. @
  872. text
  873. @d11 1
  874. a11 1
  875. static char rcsid[] = "$Header: ioctl.c,v 1.4 88/07/28 17:32:22 ouster Exp $ SPRITE (Berkeley)";
  876. d23 9
  877. d186 2
  878. a187 2
  879.         status = Fs_IOControl(fd, IOC_TTY_FLUSH, 0,
  880.             (Address) NULL, 0, (Address) NULL);
  881. a336 2
  882.     extern RequestName mapping[];
  883.     extern int mapSize;
  884. d338 68
  885. d418 1
  886. a418 1
  887.     for (i = 0; i < mapSize; i++) {
  888. a425 87
  889.  
  890. #include <sys/types.h>
  891.  
  892. #ifdef notdef
  893. /*
  894.  * Included above
  895.  */
  896. #include <sys/ioctl.h>
  897. #endif notdef
  898.  
  899. #include <fcntl.h>
  900. #include <sys/socket.h>
  901. #include <sys/ttychars.h>
  902. #include <sys/ttydev.h>
  903. #include <net/route.h>
  904. #include <net/if.h>
  905. #include <sys/time.h>
  906.  
  907. /*
  908.  * The following list contains all the ioctls in 
  909.  * /usr/include/sys/ioctl.h (SunOS 3.2).
  910.  */
  911. static RequestName mapping[] = {
  912.     {"TIOCGETD",    TIOCGETD},
  913.     {"TIOCSETD",    TIOCSETD},
  914.     {"TIOCHPCL",    TIOCHPCL},
  915.     {"TIOCMODG",    TIOCMODG},
  916.     {"TIOCMODS",    TIOCMODS},
  917.     {"TIOCGETP",    TIOCGETP},
  918.     {"TIOCSETP",    TIOCSETP},
  919.     {"TIOCSETN",    TIOCSETN},
  920.     {"TIOCEXCL",    TIOCEXCL},
  921.     {"TIOCNXCL",    TIOCNXCL},
  922.     {"TIOCFLUSH",    TIOCFLUSH},
  923.     {"TIOCSETC",    TIOCSETC},
  924.     {"TIOCGETC",    TIOCGETC},
  925.     {"TIOCLBIS",    TIOCLBIS},
  926.     {"TIOCLBIC",    TIOCLBIC},
  927.     {"TIOCLSET",    TIOCLSET},
  928.     {"TIOCLGET",    TIOCLGET},
  929.     {"TIOCSBRK",    TIOCSBRK},
  930.     {"TIOCCBRK",    TIOCCBRK},
  931.     {"TIOCSDTR",    TIOCSDTR},
  932.     {"TIOCCDTR",    TIOCCDTR},
  933.     {"TIOCSLTC",    TIOCSLTC},
  934.     {"TIOCGLTC",    TIOCGLTC},
  935.     {"TIOCOUTQ",    TIOCOUTQ},
  936.     {"TIOCSTI",    TIOCSTI},
  937.     {"TIOCNOTTY",    TIOCNOTTY},
  938.     {"TIOCPKT",    TIOCPKT},
  939.     {"TIOCSTOP",    TIOCSTOP},
  940.     {"TIOCSTART",    TIOCSTART},
  941.     {"TIOCMSET",    TIOCMSET},
  942.     {"TIOCMBIS",    TIOCMBIS},
  943.     {"TIOCMBIC",    TIOCMBIC},
  944.     {"TIOCMGET",    TIOCMGET},
  945.     {"TIOCREMOTE",    TIOCREMOTE},
  946.     {"TIOCGWINSZ",    TIOCGWINSZ},
  947.     {"TIOCSWINSZ",    TIOCSWINSZ},
  948.     {"TIOCUCNTL",    TIOCUCNTL},
  949.     {"TIOCCONS",    TIOCCONS},
  950.     {"TIOCSSIZE",    TIOCSSIZE},
  951.     {"TIOCGSIZE",    TIOCGSIZE},
  952.     {"SIOCSHIWAT",    SIOCSHIWAT},
  953.     {"SIOCGHIWAT",    SIOCGHIWAT},
  954.     {"SIOCSLOWAT",    SIOCSLOWAT},
  955.     {"SIOCGLOWAT",    SIOCGLOWAT},
  956.     {"SIOCADDRT",    SIOCADDRT},
  957.     {"SIOCDELRT",    SIOCDELRT},
  958.     {"SIOCSIFADDR",    SIOCSIFADDR},
  959.     {"SIOCGIFADDR",    SIOCGIFADDR},
  960.     {"SIOCSIFDSTADDR",    SIOCSIFDSTADDR},
  961.     {"SIOCGIFDSTADDR",    SIOCGIFDSTADDR},
  962.     {"SIOCSIFFLAGS",    SIOCSIFFLAGS},
  963.     {"SIOCGIFFLAGS",    SIOCGIFFLAGS},
  964.     {"SIOCGIFCONF",    SIOCGIFCONF},
  965.     {"SIOCGIFBRDADDR",    SIOCGIFBRDADDR},
  966.     {"SIOCSIFBRDADDR",    SIOCSIFBRDADDR},
  967.     {"SIOCGIFNETMASK",    SIOCGIFNETMASK},
  968.     {"SIOCSIFNETMASK",    SIOCSIFNETMASK},
  969.     {"SIOCGIFMETRIC",    SIOCGIFMETRIC},
  970.     {"SIOCSIFMETRIC",    SIOCSIFMETRIC},
  971.     {"SIOCSARP",    SIOCSARP},
  972.     {"SIOCGARP",    SIOCGARP},
  973.     {"SIOCDARP",    SIOCDARP},
  974. };
  975. static int mapSize = sizeof(mapping)/sizeof(RequestName);
  976. @
  977.  
  978.  
  979. 1.4
  980. log
  981. @Make arg types match UNIX.
  982. @
  983. text
  984. @d11 1
  985. a11 1
  986. static char rcsid[] = "$Header: ioctl.c,v 1.3 88/06/21 17:11:28 ouster Exp $ SPRITE (Berkeley)";
  987. d79 1
  988. a79 1
  989.                 sizeof(flag), &flag, 0, NULL);
  990. d91 1
  991. a91 1
  992.                 sizeof(flag), &flag, 0, NULL);
  993. d96 1
  994. a96 1
  995.         status = Fs_IOControl(fd, IOC_NUM_READABLE, 0, NULL,
  996. d108 1
  997. a108 1
  998.                 sizeof(flag), &flag, 0, NULL);
  999. d111 1
  1000. a111 1
  1001.                 sizeof(flag), &flag, 0, NULL);
  1002. d124 1
  1003. a124 1
  1004.                 sizeof(flag), &flag, 0, NULL);
  1005. d127 1
  1006. a127 1
  1007.                 sizeof(flag), &flag, 0, NULL);
  1008. d153 2
  1009. a154 2
  1010.         status = Fs_IOControl(fd, IOC_TTY_GET_PARAMS, 0, NULL,
  1011.             sizeof(struct sgttyb), buf);
  1012. d158 1
  1013. a158 1
  1014.             buf, 0, NULL);
  1015. d162 1
  1016. a162 1
  1017.             buf, 0, NULL);
  1018. d165 2
  1019. a166 1
  1020.         status = Fs_IOControl(fd, IOC_TTY_EXCL, 0, NULL, 0, NULL);
  1021. d169 2
  1022. a170 1
  1023.         status = Fs_IOControl(fd, IOC_TTY_NXCL, 0, NULL, 0, NULL);
  1024. d173 2
  1025. a174 1
  1026.         status = Fs_IOControl(fd, IOC_TTY_HUP_ON_CLOSE, 0, NULL, 0, NULL);
  1027. d177 2
  1028. a178 1
  1029.         status = Fs_IOControl(fd, IOC_TTY_FLUSH, 0, NULL, 0, NULL);
  1030. d182 1
  1031. a182 1
  1032.             buf, 0, NULL);
  1033. d185 2
  1034. a186 1
  1035.         status = Fs_IOControl(fd, IOC_TTY_SET_BREAK, 0, NULL, 0, NULL);
  1036. d189 2
  1037. a190 1
  1038.         status = Fs_IOControl(fd, IOC_TTY_CLEAR_BREAK, 0, NULL, 0, NULL);
  1039. d193 2
  1040. a194 1
  1041.         status = Fs_IOControl(fd, IOC_TTY_SET_DTR, 0, NULL, 0, NULL);
  1042. d197 2
  1043. a198 1
  1044.         status = Fs_IOControl(fd, IOC_TTY_CLEAR_DTR, 0, NULL, 0, NULL);
  1045. d201 2
  1046. a202 2
  1047.         status = Fs_IOControl(fd, IOC_TTY_GET_TCHARS, 0, NULL,
  1048.             sizeof(struct tchars), buf);
  1049. d206 1
  1050. a206 1
  1051.             sizeof(struct tchars), buf, 0, NULL);
  1052. d209 2
  1053. a210 2
  1054.         status = Fs_IOControl(fd, IOC_TTY_GET_LTCHARS, 0, NULL,
  1055.             sizeof(struct ltchars), buf);
  1056. d214 1
  1057. a214 1
  1058.             sizeof(struct ltchars), buf, 0, NULL);
  1059. d218 1
  1060. a218 1
  1061.             sizeof(int), buf, 0, NULL);
  1062. d222 1
  1063. a222 1
  1064.             sizeof(int), buf, 0, NULL);
  1065. d226 1
  1066. a226 1
  1067.             sizeof(int), buf, 0, NULL);
  1068. d229 2
  1069. a230 2
  1070.         status = Fs_IOControl(fd, IOC_TTY_GET_LM, 0, NULL,
  1071.             sizeof(int), buf);
  1072. d233 2
  1073. a234 2
  1074.         status = Fs_IOControl(fd, IOC_TTY_GET_DISCIPLINE, 0, NULL,
  1075.         sizeof(int), buf);
  1076. d238 1
  1077. a238 1
  1078.         sizeof(int), buf, 0, NULL);
  1079. d244 1
  1080. a244 1
  1081.                 0, NULL, sizeof(int), buf);
  1082. @
  1083.  
  1084.  
  1085. 1.3
  1086. log
  1087. @fcntl.h is in a new place.
  1088. @
  1089. text
  1090. @d11 1
  1091. a11 1
  1092. static char rcsid[] = "$Header: ioctl.c,v 1.2 88/06/21 17:09:58 ouster Exp $ SPRITE (Berkeley)";
  1093. d61 1
  1094. a61 1
  1095.     Address    buf;
  1096. @
  1097.  
  1098.  
  1099. 1.2
  1100. log
  1101. @Back-grade to use 4.3 BSD ioctl info.
  1102. @
  1103. text
  1104. @d11 1
  1105. a11 1
  1106. static char rcsid[] = "$Header: ioctl.c,v 1.1 88/06/19 14:31:33 ouster Exp $ SPRITE (Berkeley)";
  1107. d353 1
  1108. a353 1
  1109. #include <sys/fcntl.h>
  1110. @
  1111.  
  1112.  
  1113. 1.1
  1114. log
  1115. @Initial revision
  1116. @
  1117. text
  1118. @d11 1
  1119. a11 1
  1120. static char rcsid[] = "$Header: ioctl.c,v 1.11 87/10/02 00:02:55 brent Exp $ SPRITE (Berkeley)";
  1121. d15 1
  1122. a15 1
  1123. #include "sprite.h"
  1124. d17 4
  1125. a20 4
  1126. #include "compatInt.h"
  1127. #include "dev/tty.h"
  1128. #include "dev/net.h"
  1129. #include "fs.h"
  1130. a359 1
  1131. #include <net/nit.h>
  1132. a402 4
  1133.     {"TIOCTCNTL",    TIOCTCNTL},
  1134.     {"TIOCSIGNAL",    TIOCSIGNAL},
  1135.     {"TIOCSETX",    TIOCSETX},
  1136.     {"TIOCGETX",    TIOCGETX},
  1137. a417 2
  1138.     {"SIOCSIFMEM",    SIOCSIFMEM},
  1139.     {"SIOCGIFMEM",    SIOCGIFMEM},
  1140. a418 2
  1141.     {"SIOCSIFMTU",    SIOCSIFMTU},
  1142.     {"SIOCGIFMTU",    SIOCGIFMTU},
  1143. a427 8
  1144.     {"SIOCUPPER",    SIOCUPPER},
  1145.     {"SIOCLOWER",    SIOCLOWER},
  1146.     {"SIOCSETSYNC",    SIOCSETSYNC},
  1147.     {"SIOCGETSYNC",    SIOCGETSYNC},
  1148.     {"SIOCSSDSTATS",    SIOCSSDSTATS},
  1149.     {"SIOCSSESTATS",    SIOCSSESTATS},
  1150.     {"SIOCSNIT",    SIOCSNIT},
  1151.     {"SIOCGNIT",    SIOCGNIT},
  1152. @
  1153.